# Makefile

# Nom de l'exécutable
EXE = scalpa-compiler

# Options de compilation
CC     = gcc
CFLAGS = -W -Wall -Wextra -g `pkg-config --cflags glib-2.0`
LFLAGS = -lfl -ly -lm `pkg-config --libs glib-2.0`

# Fichiers sources
SRC = src/syntree.c src/symtable.c src/gencode.c src/mips.c
OBJ = $(SRC:.c=.o)

# Make =>
all : info $(EXE) done

# Cibles fictives
.PHONY : all info again clean mrproper done test

# Fichiers sources -> fichiers objets
%.o : %.c
	@echo "\t\t* $< -> $*.o"
	@$(CC) $(CFLAGS) $(LFLAGS) -c $< -o $*.o

# Compilation de l'exécutable
$(EXE) : $(OBJ) src/compiler.l src/compiler.y
	@echo "\tGénération de la grammaire YACC"
	@yacc -o src/yacc.compiler.c -dv src/compiler.y
	
	@echo "\tGénération de l'analyse syntaxique LEX"
	@lex  -o src/lex.compiler.c      src/compiler.l 
	
	@echo "\tGénération de l'exécutable '$@'"
	@$(CC)  -o $(EXE) $(OBJ) src/yacc.compiler.c src/lex.compiler.c $(CFLAGS) $(LFLAGS)

# Affichage
info :
	@echo "|--------------  Compilateur Scala  -------------------|"
	@echo "|    Auteurs : Kévin Sbai <kevin.sbai68@gmail.com>     |"
	@echo "|              Sacha Wilt <wsacha67@gmail.com>         |"
	@echo "|------------------------------------------------------|"
	@echo "\tCompilation des sources"

done :
	@echo "\tTerminé !"
	@echo "|------------------------------------------------------|"

# Tout effacer et recompiler
again : mrproper all

test :
	@./$(EXE) "examples/tableau.scalpa" 

leak :
	@valgrind --leak-check=full --show-reachable=yes $(EXE) "examples/tableau.scalpa"

gdb :
	@gdb $(EXE)

output :
	@spim -f output.s

# Effacer
clean :
	@rm -f *~
	@rm -f src/*~

mrproper : clean
	@rm -f $(EXE)
	@rm -f src/yacc*
	@rm -f src/lex*
	@rm -f src/*.o
	@rm -f *.s

